]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
keyboard: Make sure to destroy the key's BoxPointer
authorJasper St. Pierre <jstpierre@mecheye.net>
Sat, 20 Sep 2014 00:44:45 +0000 (18:44 -0600)
committerJasper St. Pierre <jstpierre@mecheye.net>
Tue, 23 Sep 2014 21:58:08 +0000 (15:58 -0600)
When the keyboard is destroyed, we destroy the keyboard actor, but the
keyboard's menu isn't part of the key itself, so it's never tracked.

The menus are actually tracked actors, so they slow down the layout
manager's code to rebuild regions and other things. Keeping this list
small is a good idea.

To prevent leaking menus, destroy the menu when the key is destroyed.

https://bugzilla.gnome.org/show_bug.cgi?id=736999

js/ui/keyboard.js

index d2a8dd59c495f0f87fa187f52412a78dde82c5aa..b3de70b9aec7930749ee5c268a3c34245cec25c5 100644 (file)
@@ -75,6 +75,7 @@ const Key = new Lang.Class({
     _init : function(key) {
         this._key = key;
         this.actor = this._makeKey(key, GLib.markup_escape_text(key.label, -1));
+        this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
 
         this._extended_keys = this._key.get_extended_keys();
         this._extended_keyboard = null;
@@ -97,6 +98,13 @@ const Key = new Lang.Class({
         }
     },
 
+    _onDestroy: function() {
+        if (this._boxPointer) {
+            this._boxPointer.actor.destroy();
+            this._boxPointer = null;
+        }
+    },
+
     _makeKey: function (key, label) {
         let button = new St.Button ({ label: label,
                                       style_class: 'keyboard-key' });